let editor2;
let chooseFilePath = '';
let menuList = '';
const msgWindow = {
    window: $('#msgWindow'),
    msg: $('#msgId'),
    show: function (msg) {
        this.msg.text(msg);
        this.window.show();
    },
    hide: function () {
        this.msg.text('');
        this.window.hide();
    }
};
event();
window.onload = function () {
    report();
    // getDataList();
}

/**
 * 同步数据
 */
function report() {
    msgWindow.show('数据同步中...')
    reportNote((code) => {
        if (code === 404) {
            msgWindow.show('仓库clone中...')
            cloneStore((msg) => {
                if (msg) {
                    report();
                } else {
                    msgWindow.hide()
                    alert('clone 失败');
                }
            })
            return;
        }
        if (code === 4) {
            msgWindow.show('更新菜单列表中...')
            getDataList(() => {
                msgWindow.hide()
            });
            return;
        }
        let msg;
        switch (code) {
            case 0:
                msg = '0，add失败';
                break;
            case 1:
                msg = '1， commit 失败';
                break;
            case 2:
                msg = '2， pull 失败';
                break;
            case 3:
                msg = '3， push 失败';
                break;
            default:
                msg = '-1， 不知道这个状态码是干啥的';
                break;
        }
        alert(`同步状态 => ${msg}`);
    });
}

/**
 * 获取数据
 * @param cb {function} 回调函数
 */
function getDataList(cb) {
    getMenuList((data) => {
        if (data && data.length) {
            menuList = data;
            createMenuElem(data);
            initEdit();
            chooseFilePath = data[0].path;
            getData(data[0].path);
        }
        if (typeof cb === 'function') {
            cb();
        }
    });
}

function createMenuElem(data) {
    const navWrap = $('#navWrap');
    navWrap.html('');
    const arr = [];
    data.forEach((v, i) => {
        arr.push(
            `<div class="nav-item ${i === 0 ? 'click' : ''}" data-file-path="${v.path}">
                    <p data-file-path="${v.path}">${v.content}</p>
                </div>`
        );
    });
    navWrap.html(arr.join(''));
}

/**
 * 初始化文本编辑器
 */
function initEdit() {
    const E = window.wangEditor;
    editor2 = new E('#editTitle', '#editContent');
    editor2.customConfig.menus = [
        'head',  // 标题
        'bold',  // 粗体
        'fontSize',  // 字号
        'fontName',  // 字体
        'italic',  // 斜体
        'underline',  // 下划线
        'strikeThrough',  // 删除线
        'foreColor',  // 文字颜色
        'backColor',  // 背景颜色
        'list',  // 列表
        'justify',  // 对齐方式
        'quote',  // 引用
        'image',  // 插入图片
        'table',  // 表格
        'code',  // 插入代码
        'undo',  // 撤销
        'redo'  // 重复
    ];
    editor2.customConfig.onchange = debounce(function (html) {
        if (chooseFilePath) {
            sendFileData(chooseFilePath, html, (status) => {
                console.log(status);
            });
        }
    }, 500);
    editor2.create();
}

/**
 * 函数防抖
 * @param func {function} 执行的函数
 * @param wait {number} 间隔的时间
 * @returns {Function}
 */
function debounce(func, wait) {
    let timeout;
    return function () {
        let context = this;
        let args = arguments;

        if (timeout) clearTimeout(timeout);

        timeout = setTimeout(() => {
            func.apply(context, args);
        }, wait);
    };
}

/**
 * 获取文件的内容并显示在编辑器中
 * @param path
 */
function getData(path) {
    getFileData(path, function (data) {
        console.log(data);
        editor2.txt.html(data);
    });
}

/**
 * 网页事件加入
 */
function event() {
    $('#navWrap').click(function (e) {
        getData(e.target.getAttribute('data-file-path'));
        $('.click').removeClass('click');
        const wrap = e.target.classList.contains('nav-item') ? e.target : e.target.parentNode;
        console.log(wrap.classList.add('click'));
    });

    $('#reportBtn').click(report)

    $('#create').click(function () {
        createFile((path) => {
            menuList.unshift({
                path,
                contnet: ''
            });
            createMenuElem(menuList);
        });
    });
}


